/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package services.emprestimo;

import data.Dinheiro;
import data.Empregado;
import data.TipoSolicitante;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author
 * PedroLZ
 */
public class TiposDeSolicitante
{
	public static List< TipoSolicitante > getTodos()
	{
		List< TipoSolicitante > tiposDeSolicitante = new ArrayList<>();
		
		tiposDeSolicitante.add( homemDe21a35AnosSalarioAcima5000 );
		tiposDeSolicitante.add( homemDe21a35AnosSalarioIgualOuAbaixo5000 );
		tiposDeSolicitante.add( homemDe36a45AnosSalarioAcima6000 );
		tiposDeSolicitante.add( homemDe36a45AnosSalarioIgualOuAbaixo6000 );
		tiposDeSolicitante.add( homemDe46a65Anos );
		tiposDeSolicitante.add( mulherDe21a30Anos );
		tiposDeSolicitante.add( mulherDe31a44Anos );
		tiposDeSolicitante.add( mulherDe45a61Anos );
		
		return( tiposDeSolicitante );
	}

	//-------------------------------------------------------------------------
	// Tipos de Solicitante
	//-------------------------------------------------------------------------	
	private static TipoSolicitante homemDe21a35AnosSalarioAcima5000 = new TipoSolicitante() {
		@Override
		public boolean isSolicitanteDesteTipo(Empregado solicitante) {
			return( solicitante.isHomem() &&
					solicitante.getIdade() >= 21 &&
					solicitante.getIdade() <= 35 &&
					solicitante.getSalario().isMaiorQue( new Dinheiro(5000,0) ) );
		}

		@Override
		public Dinheiro getLimiteEmprestimo(Empregado solicitante) {
			return( solicitante.getSalario().getValorVezes( 0.7 ) );
		}
	};
	
	//-------------------------------------------------------------------------	
	private static TipoSolicitante homemDe21a35AnosSalarioIgualOuAbaixo5000 = new TipoSolicitante() {
		@Override
		public boolean isSolicitanteDesteTipo(Empregado solicitante) {
			return( solicitante.isHomem() &&
					solicitante.getIdade() >= 21 &&
					solicitante.getIdade() <= 35 &&
					!solicitante.getSalario().isMaiorQue( new Dinheiro(5000,0) ) );
		}

		@Override
		public Dinheiro getLimiteEmprestimo(Empregado solicitante) {
			return( solicitante.getSalario().getValorVezes( 0.6 ) );
		}
	};
	
	//-------------------------------------------------------------------------	
	private static TipoSolicitante homemDe36a45AnosSalarioAcima6000 = new TipoSolicitante() {
		@Override
		public boolean isSolicitanteDesteTipo(Empregado solicitante) {
			return( solicitante.isHomem() &&
					solicitante.getIdade() >= 36 &&
					solicitante.getIdade() <= 45 &&
					solicitante.getSalario().isMaiorQue( new Dinheiro(6000,0) ) );
		}

		@Override
		public Dinheiro getLimiteEmprestimo(Empregado solicitante) {
			return( solicitante.getSalario().getValorVezes( 0.55 ) );
		}
	};	

	//-------------------------------------------------------------------------	
	private static TipoSolicitante homemDe36a45AnosSalarioIgualOuAbaixo6000 = new TipoSolicitante() {
		@Override
		public boolean isSolicitanteDesteTipo(Empregado solicitante) {
			return( solicitante.isHomem() &&
					solicitante.getIdade() >= 36 &&
					solicitante.getIdade() <= 45 &&
					!solicitante.getSalario().isMaiorQue( new Dinheiro(6000,0) ) );
		}

		@Override
		public Dinheiro getLimiteEmprestimo(Empregado solicitante) {
			return( solicitante.getSalario().getValorVezes( 0.45 ) );
		}
	};

	//-------------------------------------------------------------------------	
	private static TipoSolicitante homemDe46a65Anos = new TipoSolicitante() {
		@Override
		public boolean isSolicitanteDesteTipo(Empregado solicitante) {
			return( solicitante.isHomem() &&
					solicitante.getIdade() >= 46 &&
					solicitante.getIdade() <= 65 );
		}

		@Override
		public Dinheiro getLimiteEmprestimo(Empregado solicitante) {
			return( solicitante.getSalario().getValorVezes( 0.35 ) );
		}
	};

	//-------------------------------------------------------------------------	
	private static TipoSolicitante mulherDe21a30Anos = new TipoSolicitante() {
		@Override
		public boolean isSolicitanteDesteTipo(Empregado solicitante) {
			return( solicitante.isMulher() &&
					solicitante.getIdade() >= 21 &&
					solicitante.getIdade() <= 30 );
		}

		@Override
		public Dinheiro getLimiteEmprestimo(Empregado solicitante) {
			return( solicitante.getSalario().getValorVezes( 0.75 ) );
		}
	};

	//-------------------------------------------------------------------------	
	private static TipoSolicitante mulherDe31a44Anos = new TipoSolicitante() {
		@Override
		public boolean isSolicitanteDesteTipo(Empregado solicitante) {
			return( solicitante.isMulher() &&
					solicitante.getIdade() >= 31 &&
					solicitante.getIdade() <= 44 );
		}

		@Override
		public Dinheiro getLimiteEmprestimo(Empregado solicitante) {
			return( solicitante.getSalario().getValorVezes( 0.55 ) );
		}
	};

	//-------------------------------------------------------------------------	
	private static TipoSolicitante mulherDe45a61Anos = new TipoSolicitante() {
		@Override
		public boolean isSolicitanteDesteTipo(Empregado solicitante) {
			return( solicitante.isMulher() &&
					solicitante.getIdade() >= 45 &&
					solicitante.getIdade() <= 61 );
		}

		@Override
		public Dinheiro getLimiteEmprestimo(Empregado solicitante) {
			return( solicitante.getSalario().getValorVezes( 0.40 ) );
		}
	};	
}
